<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 1. 实现树形结构, pid就是每个成员的父级
      let data = [
        { id: 1, pid: 0 },
        { id: 2, pid: 1 },
        { id: 3, pid: 0 },
        { id: 4, pid: 2 },
      ];
      let tree = {};
      for (let item of data) {
        if (!(item.pid in tree)) {
          tree[item.pid] = [];
        }
        tree[item.pid].push(item);
      }

      console.log(tree);

      // 2. 不修改代码的情况下, 实现修改 obj 的内容
      const test = (() => {
        let obj = {
          a: "变量a",
          b: "变量b",
        };
        console.log(obj);
        return {
          get: (k) => {
            return obj[k];
          },
          set: (k, v) => {
            obj[k] = v;
          },
        };
      })();
      test.set("c", "变量c");
      test.set("a", "新变量a");
      console.log(test.get("c"));

      // 3. 得出以下结果, 并且说明原因
      window.number = 2;
      let obj = {
        number: 3,
        db: (function () {
          this.number *= 4;
          return function () {
            this.number *= 5;
          };
        })(),
      };
      let db = obj.db; //将 obj.db 的值赋给了变量 db
      db(); //此时 this 指向全局对象 window，将 window.number 的值乘以 5，使其变为 40
      obj.db(); //此时 this 指向 obj 对象，将 obj.number 的值乘以 5，使其变为 15。
      console.log(window.number); //输出的是经过两次乘法操作后的值：2 * 4 * 5 = 40
      console.log(obj.number); //输出的是经过一次乘法操作后的值：3 * 5 = 15
    </script>
  </body>
</html>
